package com.zenithmind.coding.pojo.entity;

import com.baomidou.mybatisplus.annotation.TableName;
import com.zenithmind.common.base.BaseEntity;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.EqualsAndHashCode;

import java.time.LocalDateTime;

/**
 * 用户学习进度实体类
 * 
 * @author ZenithMind Team
 * @since 2025-01-09
 */
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("coding_user_progress")
@Schema(description = "用户学习进度实体")
public class UserProgress extends BaseEntity {

    /**
     * 用户ID
     */
    @Schema(description = "用户ID")
    private String userId;

    /**
     * 课程ID
     */
    @Schema(description = "课程ID")
    private String courseId;

    /**
     * 问题ID
     */
    @Schema(description = "问题ID")
    private String problemId;

    /**
     * 进度类型（1-课程学习，2-问题练习，3-项目实战）
     */
    @Schema(description = "进度类型（1-课程学习，2-问题练习，3-项目实战）")
    private Integer progressType;

    /**
     * 学习状态（0-未开始，1-学习中，2-已完成，3-已放弃）
     */
    @Schema(description = "学习状态（0-未开始，1-学习中，2-已完成，3-已放弃）")
    private Integer status;

    /**
     * 完成进度（百分比）
     */
    @Schema(description = "完成进度（百分比）")
    private Integer progress;

    /**
     * 学习时长（分钟）
     */
    @Schema(description = "学习时长（分钟）")
    private Integer studyTime;

    /**
     * 提交次数
     */
    @Schema(description = "提交次数")
    private Integer submitCount;

    /**
     * 通过次数
     */
    @Schema(description = "通过次数")
    private Integer passCount;

    /**
     * 最佳成绩
     */
    @Schema(description = "最佳成绩")
    private Integer bestScore;

    /**
     * 最佳用时（毫秒）
     */
    @Schema(description = "最佳用时（毫秒）")
    private Integer bestTime;

    /**
     * 最佳内存（KB）
     */
    @Schema(description = "最佳内存（KB）")
    private Integer bestMemory;

    /**
     * 获得积分
     */
    @Schema(description = "获得积分")
    private Integer earnedPoints;

    /**
     * 获得徽章（JSON格式）
     */
    @Schema(description = "获得徽章（JSON格式）")
    private String earnedBadges;

    /**
     * 学习笔记
     */
    @Schema(description = "学习笔记")
    private String notes;

    /**
     * 开始学习时间
     */
    @Schema(description = "开始学习时间")
    private LocalDateTime startTime;

    /**
     * 完成时间
     */
    @Schema(description = "完成时间")
    private LocalDateTime completeTime;

    /**
     * 最后学习时间
     */
    @Schema(description = "最后学习时间")
    private LocalDateTime lastStudyTime;

    /**
     * 连续学习天数
     */
    @Schema(description = "连续学习天数")
    private Integer consecutiveDays;

    /**
     * 学习排名
     */
    @Schema(description = "学习排名")
    private Integer ranking;

    /**
     * 是否收藏（0-否，1-是）
     */
    @Schema(description = "是否收藏（0-否，1-是）")
    private Integer isFavorite;

    /**
     * 是否推荐给朋友（0-否，1-是）
     */
    @Schema(description = "是否推荐给朋友（0-否，1-是）")
    private Integer isRecommended;

    /**
     * 学习评价
     */
    @Schema(description = "学习评价")
    private String review;

    /**
     * 评分（1-5星）
     */
    @Schema(description = "评分（1-5星）")
    private Integer rating;
}
